package com.yuw.io.filestreamdemo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TestDriver_FileStream {
	public static void main(String[] args) {
		test012();
	}

	/**
	 * 读取一个文件，将文件的内容写出到另外一个文件
	 */
	private static void test012() {
		try {
			// 创建一个文件输入流的对象
			InputStream is = new FileInputStream("D:\\mytemp\\zb201807\\myFiles\\ClassMaster.java");
			// 构造方法的第二个参数：默认false--覆盖写；true--接着写；
			OutputStream os = new FileOutputStream("D:\\mytemp\\zb201807\\myFiles\\ClassMaster_out2.java", true);
			// 创建一个字节数组，用于接收输入流
			byte[] b = new byte[1024];
			// 使用字节数组，一次将输入读取进到字节数组中
			int len = is.read(b);
			while (len > 0) {
				// 需要进行多次接收
				// 业务处理：将用字节数组接收的输入流，转换为字符串进行输出
				// String str = new String(b);
				String str = new String(b, 0, len);
				System.out.println(str);

				// 使用输出流将输入流读取到字节数组的内容写出到另外一个文件中
				os.write(b, 0, len);
				// 改变循环因子：继续读入后续内容直到结束
				len = is.read(b);
			}
			// 清空输出流
			os.flush();
			// 关闭资源
			is.close();
			os.close();
		} catch (Exception e) {
			// 异常处理
			System.out.println("读取文件输入流发生异常：" + e.getMessage());
		}

	}

	/**
	 * 文件输出流
	 */
	private static void test011() {
		// 创建一个文件输出流的对象
		OutputStream os = null;
		try {
			// 文件输出流默认是覆盖写，如果需要在文件内容末尾接着写，则需要制定第二个参数
			// 构造方法的第二个参数：默认false--覆盖写；true--接着写；
			os = new FileOutputStream("D:\\mytemp\\zb201807\\myFiles\\ClassMaster_out1.java", true);
			// 输出内容，字符串
			String strOut = "jkdljf;lsajfuewjfdsjfjdslkfj;dsjaf;ljdsaf;sa";
			// 将要输出字符串转换为字节数组
			byte[] b = strOut.getBytes();
			// 使用文件输出流将字符串写到输出文件中
			os.write(b);
			// 追加一个换行
			os.write("\n".getBytes());
			// 清空
			os.flush();
			System.out.println("文件输出流写出完成");
		} catch (Exception e) {
			// 异常处理
			System.out.println("读取文件输出流发生异常：" + e.getMessage());
		} finally {
			// 关闭资源
			if (os != null) {
				try {
					os.close();
				} catch (IOException e) {
					// 文件关闭异常
					System.out.println("关闭文件输出流发生异常：" + e.getMessage());
				}
			}
		}
	}

	/**
	 * 文件输入流
	 */
	private static void test01() {
		try {
			// 创建一个文件输入流的对象
			InputStream is = new FileInputStream("D:\\mytemp\\zb201807\\myFiles\\ClassMaster.java");
			// 创建一个字节数组，用于接收输入流
			byte[] b = new byte[1024];
			// 使用字节数组，一次将输入读取进到字节数组中
			int len = is.read(b);
			while (len > 0) {
				// 需要进行多次接收
				// 业务处理：将用字节数组接收的输入流，转换为字符串进行输出
				// String str = new String(b);
				String str = new String(b, 0, len);
				System.out.println(str);
				// 改变循环因子：继续读入后续内容直到结束
				len = is.read(b);
			}
			// 关闭资源
			is.close();
		} catch (Exception e) {
			// 异常处理
			System.out.println("读取文件输入流发生异常：" + e.getMessage());
		}

	}
}
